AWS CLIでEBSボリュームのDeleteOnTerminationを設定してみる
こんにちは、クラスメソッドのキム・ジェウク(Kim Jaewook)です。
今回は、AWS CLIでEBSボリュームのDeleteOnTerminationオプションを設定するコマンドを整理してみました。
EC2インスタンスを削除しても、EBSボリュームが残っている問題
EC2インスタンスにEBSボリュームをアタッチした後、EC2インスタンスを削除してみると、ルートボリュームだけが削除され、アタッチしたボリュームは削除されません。
実際、アタッチしたボリュームを確認してみると「終了時に削除」がFalseになっているのを確認できます。
「終了時に削除」はEC2インスタンスを作成する時、設定できます。
この機能を無効にした場合、ボリュームは EC2 インスタンスの実行期間とは無関係に存続されます。インスタンスを終了しても、ボリュームはアカウントにプロビジョニングされたままになります。インスタンスの終了後にボリュームが不要になった場合は、手動で削除する必要があります。
このオプションを設定しない場合、手動で削除する必要があります。
DeleteOnTerminationを設定
target=instanceID aws ec2 describe-instances --instance-ids ${target} | jq '.Reservations[].Instances[] | {Tags, InstanceId, BlockDeviceMappings}'
上記のコマンドを実行してみると、ルートボリュームは「DeleteOnTermination」がtrueに設定されていますが、追加ボリュームはfalseに設定されています。
DeleteOnTerminationがtrueの場合、EC2インスタンスが削除される時、ボリュームも自動的に削除されます。
そのため、自動的に削除したい場合は、DeleteOnTerminationをtrueに設定する必要があります。
DeviceName=xvdf VolumeId=EBS VolumeID aws ec2 modify-instance-attribute --instance-id ${target} --block-device-mappings "{\"DeviceName\":\"${DeviceName}\",\"Ebs\":{\"DeleteOnTermination\":true,\"VolumeId\":\"${VolumeId}\"}}" aws ec2 describe-instances --instance-ids ${target} | jq '.Reservations[].Instances[] | {Tags, InstanceId, BlockDeviceMappings}'
aws ec2 modify-instance-attributeのコマンドで、DeleteOnTerminationをtrueに変更します。
xvdfボリュームのDeleteOnTerminationがtrueに変更されたことを確認できます。
実際、EC2インスタンスを削除してみると、ルートボリュームと、xvdfだけ削除され、DeleteOnTerminationがfalseに設定されているxvdgは削除されないまま残っているのを確認できます。